JavaScriptã€ãã¬ãŒã¿ãã«ããŒã¹ããªãŒã ãæ·±ãæãäžããçŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³ã«ãããã¹ããªãŒã æäœã®åŠçé床ã«é¢ããããã©ãŒãã³ã¹ã®èæ ®äºé ãšæé©åæè¡ã«çŠç¹ãåœãŠãŸãã
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ã¹ããªãŒã ããã©ãŒãã³ã¹ïŒã¹ããªãŒã æäœã®åŠçé床
ã¹ããªãŒã ããã€ãã©ã€ã³ãšãåŒã°ããJavaScriptã®ã€ãã¬ãŒã¿ãã«ããŒã¯ãããŒã¿ã³ã¬ã¯ã·ã§ã³ãåŠçããããã®åŒ·åã§ãšã¬ã¬ã³ããªæ¹æ³ãæäŸããŸãããããã¯ããŒã¿æäœã«é¢æ°åã¢ãããŒããæäŸããéçºè ãç°¡æœã§è¡šçŸåè±ããªã³ãŒããæžãããšãå¯èœã«ããŸããããããç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããããã©ãŒãã³ã¹ãéèŠãããã¢ããªã±ãŒã·ã§ã³ãæ±ãå Žåãã¹ããªãŒã æäœã®ããã©ãŒãã³ã¹ã¯éèŠãªèæ ®äºé ã§ãããã®èšäºã§ã¯ãJavaScriptã€ãã¬ãŒã¿ãã«ããŒã¹ããªãŒã ã®ããã©ãŒãã³ã¹é¢ã«çŠç¹ãåœãŠãå¹ççãªã¹ããªãŒã æäœã®åŠçé床ã確ä¿ããããã®æé©åæè¡ãšãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠæ¢ããŸãã
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ç޹ä»
ã€ãã¬ãŒã¿ãã«ããŒã¯ãJavaScriptã®ããŒã¿åŠçæ©èœã«é¢æ°åããã°ã©ãã³ã°ã®ãã©ãã€ã ãå°å ¥ããŸããããã«ãããæäœãé£éãããŠãäžé£ã®å€ã倿ãããã€ãã©ã€ã³ãäœæã§ããŸãããããã®ãã«ããŒã¯ãäžåºŠã«äžã€ã®å€ãé æ¬¡æäŸãããªããžã§ã¯ãã§ããã€ãã¬ãŒã¿äžã§åäœããŸããã€ãã¬ãŒã¿ãšããŠæ±ããããŒã¿ãœãŒã¹ã®äŸã«ã¯ãé åãã»ãããããããããã«ã¯ã«ã¹ã¿ã ããŒã¿æ§é ãªã©ããããŸãã
äžè¬çãªã€ãã¬ãŒã¿ãã«ããŒã«ã¯ã以äžã®ãããªãã®ããããŸãïŒ
- map: ã¹ããªãŒã å ã®åèŠçŽ ã倿ããŸãã
- filter: æå®ãããæ¡ä»¶ã«äžèŽããèŠçŽ ãéžæããŸãã
- reduce: å€ãåäžã®çµæã«èç©ããŸãã
- forEach: åèŠçŽ ã«å¯ŸããŠé¢æ°ãå®è¡ããŸãã
- some: å°ãªããšã1ã€ã®èŠçŽ ãæ¡ä»¶ãæºããã確èªããŸãã
- every: ãã¹ãŠã®èŠçŽ ãæ¡ä»¶ãæºããã確èªããŸãã
- find: æ¡ä»¶ãæºããæåã®èŠçŽ ãè¿ããŸãã
- findIndex: æ¡ä»¶ãæºããæåã®èŠçŽ ã®ã€ã³ããã¯ã¹ãè¿ããŸãã
- take: æåã®`n`åã®èŠçŽ ã®ã¿ãå«ãæ°ããã¹ããªãŒã ãè¿ããŸãã
- drop: æåã®`n`åã®èŠçŽ ãçç¥ããæ°ããã¹ããªãŒã ãè¿ããŸãã
ãããã®ãã«ããŒã¯ãé£éãããŠè€éãªããŒã¿åŠçãã€ãã©ã€ã³ãäœæããããšãã§ããŸãããã®é£éæ§ã«ãããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžããŸãã
äŸïŒæ°å€ã®é åã倿ããå¶æ°ããã£ã«ã¿ãªã³ã°ããïŒ
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const oddSquares = numbers
.filter(x => x % 2 !== 0)
.map(x => x * x);
console.log(oddSquares); // Output: [1, 9, 25, 49, 81]
é å»¶è©äŸ¡ãšã¹ããªãŒã ããã©ãŒãã³ã¹
ã€ãã¬ãŒã¿ãã«ããŒã®äž»èŠãªå©ç¹ã®äžã€ã¯ãé å»¶è©äŸ¡ãå®è¡ã§ããèœåã§ããé å»¶è©äŸ¡ãšã¯ãæäœã®çµæãå®éã«å¿ èŠã«ãªããŸã§å®è¡ãããªãããšãæå³ããŸããããã«ãããç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«ãå€§å¹ ãªããã©ãŒãã³ã¹åäžãæåŸ ã§ããŸãã
次ã®äŸãèããŠã¿ãŸãããïŒ
const largeArray = Array.from({ length: 1000000 }, (_, i) => i + 1);
const firstFiveSquares = largeArray
.map(x => {
console.log("Mapping: " + x);
return x * x;
})
.filter(x => {
console.log("Filtering: " + x);
return x % 2 !== 0;
})
.slice(0, 5);
console.log(firstFiveSquares); // Output: [1, 9, 25, 49, 81]
é å»¶è©äŸ¡ããªããã°ãæçµçã«å¿ èŠãªã®ã¯æåã®5ã€ã®å¥æ°ã®äºä¹ã ãã§ããã«ããããããã`map`æäœã¯1,000,000åãã¹ãŠã®èŠçŽ ã«é©çšãããŠããŸããŸããé å»¶è©äŸ¡ã«ããã`map`ãš`filter`æäœã¯ã5ã€ã®å¥æ°ã®äºä¹ãèŠã€ãããŸã§ããå®è¡ãããŸããã
ãããããã¹ãŠã®JavaScriptãšã³ãžã³ãã€ãã¬ãŒã¿ãã«ããŒã«å¯ŸããŠé å»¶è©äŸ¡ãå®å šã«æé©åããŠããããã§ã¯ãããŸãããå Žåã«ãã£ãŠã¯ãã€ãã¬ãŒã¿ã®äœæãšç®¡çã«é¢é£ãããªãŒããŒãããã®ããã«ãé å»¶è©äŸ¡ã®ããã©ãŒãã³ã¹äžã®å©ç¹ãéå®çã«ãªãããšããããŸãããããã£ãŠãããŸããŸãªJavaScriptãšã³ãžã³ãã€ãã¬ãŒã¿ãã«ããŒãã©ã®ããã«åŠçããããçè§£ããæœåšçãªããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããããã«ã³ãŒãããã³ãããŒã¯ããããšãéèŠã§ãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ãšæé©åæè¡
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã¹ããªãŒã ã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ã®ããããã€ãã®èŠå ããããŸãã以äžã«ãäž»èŠãªèæ ®äºé ãšæé©åæè¡ãããã€ã瀺ããŸãïŒ
1. äžéããŒã¿æ§é ãæå°åãã
åã€ãã¬ãŒã¿ãã«ããŒæäœã¯éåžžãæ°ããäžéã€ãã¬ãŒã¿ãäœæããŸããããã¯ãç¹ã«è€æ°ã®æäœãé£éãããå Žåã«ãã¡ã¢ãªã®ãªãŒããŒããããšããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãããã®ãªãŒããŒããããæå°éã«æããããã«ãå¯èœãªéãæäœãåäžã®ãã¹ã«ãŸãšããããã«ããŠãã ããã
äŸïŒ `map`ãš`filter`ãåäžã®æäœã«ãŸãšããïŒ
// éå¹çïŒ
const numbers = [1, 2, 3, 4, 5];
const oddSquares = numbers
.filter(x => x % 2 !== 0)
.map(x => x * x);
// ããå¹ççïŒ
const oddSquaresOptimized = numbers
.map(x => (x % 2 !== 0 ? x * x : null))
.filter(x => x !== null);
ãã®äŸã§ã¯ãæé©åãããããŒãžã§ã³ã¯ã奿°ã«å¯ŸããŠã®ã¿æ¡ä»¶ä»ãã§äºä¹ãèšç®ãããã®åŸ`null`å€ããã£ã«ã¿ãªã³ã°ããããšã§ãäžéé åã®äœæãåé¿ããŠããŸãã
2. äžèŠãªã€ãã¬ãŒã·ã§ã³ãé¿ãã
ããŒã¿åŠçãã€ãã©ã€ã³ãæ³šææ·±ãåæããäžèŠãªã€ãã¬ãŒã·ã§ã³ãç¹å®ããŠæé€ããŠãã ãããäŸãã°ãããŒã¿ã®äžéšã®ã¿ãåŠçããå¿ èŠãããå Žåã¯ã`take`ã`slice`ãã«ããŒã䜿çšããŠã€ãã¬ãŒã·ã§ã³ã®æ°ãå¶éããŸãã
äŸïŒ æåã®10èŠçŽ ã®ã¿ãåŠçããïŒ
const largeArray = Array.from({ length: 1000 }, (_, i) => i + 1);
const firstTenSquares = largeArray
.slice(0, 10)
.map(x => x * x);
ããã«ããã`map`æäœã¯æåã®10èŠçŽ ã«ã®ã¿é©çšãããå€§èŠæš¡ãªé åãæ±ãéã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
3. å¹ççãªããŒã¿æ§é ã䜿çšãã
ããŒã¿æ§é ã®éžæã¯ãã¹ããªãŒã æäœã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããäŸãã°ãèŠçŽ ã®ååšãé »ç¹ã«ç¢ºèªããå¿ èŠãããå Žåã`Array`ã®ä»£ããã«`Set`ã䜿çšãããš`filter`æäœã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
äŸïŒ å¹ççãªãã£ã«ã¿ãªã³ã°ã®ããã«`Set`ã䜿çšããïŒ
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const evenNumbersSet = new Set([2, 4, 6, 8, 10]);
const oddNumbers = numbers.filter(x => !evenNumbersSet.has(x));
`Set`ã®`has`ã¡ãœããã¯å¹³åèšç®éãO(1)ã§ããã®ã«å¯Ÿãã`Array`ã®`includes`ã¡ãœããã¯èšç®éãO(n)ã§ãããããã£ãŠãå€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã`Set`ã䜿çšããããšã§`filter`æäœã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
4. ãã©ã³ã¹ãã¥ãŒãµã®äœ¿çšãæ€èšãã
ãã©ã³ã¹ãã¥ãŒãµã¯ãè€æ°ã®ã¹ããªãŒã æäœãåäžã®ãã¹ã«ãŸãšããããšãå¯èœã«ãã颿°åããã°ã©ãã³ã°æè¡ã§ããããã«ãããäžéã€ãã¬ãŒã¿ã®äœæãšç®¡çã«é¢é£ãããªãŒããŒããããå€§å¹ ã«åæžã§ããŸãããã©ã³ã¹ãã¥ãŒãµã¯JavaScriptã«çµã¿èŸŒãŸããŠããŸããããRamdaã®ãããªã©ã€ãã©ãªããã©ã³ã¹ãã¥ãŒãµã®å®è£ ãæäŸããŠããŸãã
äŸïŒæŠå¿µçïŒïŒ `map`ãš`filter`ãçµã¿åããããã©ã³ã¹ãã¥ãŒãµïŒ
// (ããã¯ç°¡ç¥åãããæŠå¿µçãªäŸã§ãããå®éã®ãã©ã³ã¹ãã¥ãŒãµã®å®è£
ã¯ããè€éã«ãªããŸã)
const mapFilterTransducer = (mapFn, filterFn) => {
return (reducer) => {
return (acc, input) => {
const mappedValue = mapFn(input);
if (filterFn(mappedValue)) {
return reducer(acc, mappedValue);
}
return acc;
};
};
};
//äœ¿çšæ³ïŒä»®æ³çãªreduce颿°ã䜿çšïŒ
//const result = reduce(mapFilterTransducer(x => x * 2, x => x > 5), [], [1, 2, 3, 4, 5]);
5. éåææäœã掻çšãã
ãªã¢ãŒããµãŒããŒããã®ããŒã¿ååŸããã£ã¹ã¯ããã®ãã¡ã€ã«èªã¿èŸŒã¿ãªã©ãI/OããŠã³ããªæäœãæ±ãå Žåã¯ãéåæã€ãã¬ãŒã¿ãã«ããŒã®äœ¿çšãæ€èšããŠãã ãããéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšãããšãæäœã䞊è¡ããŠå®è¡ã§ããããŒã¿åŠçãã€ãã©ã€ã³å šäœã®ã¹ã«ãŒããããåäžããŸããæ³šæïŒJavaScriptã®çµã¿èŸŒã¿é åã¡ãœããã¯æ¬è³ªçã«éåæã§ã¯ãããŸãããéåžžã`.map()`ã`.filter()`ã®ã³ãŒã«ããã¯å ã§éåæé¢æ°ã掻çšããäžŠè¡æäœãåŠçããããã«`Promise.all()`ãšçµã¿åãããããšãå€ãã§ãã
äŸïŒ éåæã§ããŒã¿ãååŸããåŠçããïŒ
async function fetchData(url) {
const response = await fetch(url);
return await response.json();
}
async function processData() {
const urls = ['url1', 'url2', 'url3'];
const results = await Promise.all(urls.map(async url => {
const data = await fetchData(url);
return data.map(item => item.value * 2); // åŠçã®äŸ
}));
console.log(results.flat()); // é
åã®é
åããã©ããåãã
}
processData();
6. ã³ãŒã«ããã¯é¢æ°ãæé©åãã
ã€ãã¬ãŒã¿ãã«ããŒã§äœ¿çšãããã³ãŒã«ããã¯é¢æ°ã®ããã©ãŒãã³ã¹ã¯ãå šäœã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããã³ãŒã«ããã¯é¢æ°ãã§ããã ãå¹ççã§ããããšã確èªããŠãã ãããã³ãŒã«ããã¯å ã§ã®è€éãªèšç®ãäžèŠãªæäœã¯é¿ããŠãã ããã
7. ã³ãŒãã®ãããã¡ã€ãªã³ã°ãšãã³ãããŒã¯ãè¡ã
ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããæã广çãªæ¹æ³ã¯ãã³ãŒãã®ãããã¡ã€ãªã³ã°ãšãã³ãããŒã¯ãè¡ãããšã§ãããã©ãŠã¶ãNode.jsã§å©çšå¯èœãªãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãæãæéãæ¶è²»ããŠãã颿°ãç¹å®ããŸããããŒã¿åŠçãã€ãã©ã€ã³ã®ããŸããŸãªå®è£ ããã³ãããŒã¯ããŠãã©ããæãããã©ãŒãã³ã¹ãè¯ããã倿ããŸãã`console.time()`ã`console.timeEnd()`ã®ãããªããŒã«ã¯ç°¡åãªæéæ å ±ãæäŸã§ããŸããChrome DevToolsã®ãããªããé«åºŠãªããŒã«ã¯ã詳现ãªãããã¡ã€ãªã³ã°æ©èœãæäŸããŸãã
8. ã€ãã¬ãŒã¿äœæã®ãªãŒããŒããããèæ ®ãã
ã€ãã¬ãŒã¿ã¯é å»¶è©äŸ¡ãæäŸããŸãããã€ãã¬ãŒã¿ã®äœæãšç®¡çèªäœããªãŒããŒããããåŒãèµ·ããå¯èœæ§ããããŸããéåžžã«å°ããªããŒã¿ã»ããã®å Žåãã€ãã¬ãŒã¿äœæã®ãªãŒããŒããããé å»¶è©äŸ¡ã®å©ç¹ãäžåãå¯èœæ§ããããŸãããã®ãããªå Žåã¯ãåŸæ¥ã®é åã¡ãœããã®æ¹ãããã©ãŒãã³ã¹ãé«ããããããŸããã
å®äžçã®äŸãšã±ãŒã¹ã¹ã¿ãã£
ã€ãã¬ãŒã¿ãã«ããŒã®ããã©ãŒãã³ã¹ãã©ã®ããã«æé©åã§ããããããã€ãã®å®äžçã®äŸãèŠãŠã¿ãŸãããïŒ
äŸ1ïŒãã°ãã¡ã€ã«ã®åŠç
ç¹å®ã®æ å ±ãæœåºããããã«å€§èŠæš¡ãªãã°ãã¡ã€ã«ãåŠçããå¿ èŠããããšæ³åããŠãã ããããã°ãã¡ã€ã«ã«ã¯æ°çŸäžè¡ãå«ãŸããŠãããããããŸããããåæããå¿ èŠãããã®ã¯ãã®ããäžéšã ãã§ãã
éå¹çãªã¢ãããŒãïŒ ãã°ãã¡ã€ã«å šäœãã¡ã¢ãªã«èªã¿èŸŒã¿ããã®åŸã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠããŒã¿ããã£ã«ã¿ãªã³ã°ããã³å€æããã
æé©åãããã¢ãããŒãïŒ ã¹ããªãŒã ããŒã¹ã®ã¢ãããŒãã䜿çšããŠãã°ãã¡ã€ã«ã1è¡ãã€èªã¿èŸŒããåè¡ãèªã¿èŸŒãŸãããã³ã«ãã£ã«ã¿ãªã³ã°ãšå€ææäœãé©çšãããã¡ã€ã«å šäœãã¡ã¢ãªã«ããŒãããå¿ èŠããªããããã¡ã€ã«ããã£ã³ã¯ã§èªã¿èŸŒãããã«éåææäœã䜿çšããã¹ã«ãŒããããåäžãããã
äŸ2ïŒWebã¢ããªã±ãŒã·ã§ã³ã§ã®ããŒã¿åæ
ãŠãŒã¶ãŒã®å ¥åã«åºã¥ããŠããŒã¿å¯èŠåã衚瀺ããWebã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããããã®ã¢ããªã±ãŒã·ã§ã³ã¯ãå¯èŠåãçæããããã«å€§èŠæš¡ãªããŒã¿ã»ãããåŠçããå¿ èŠããããããããŸããã
éå¹çãªã¢ãããŒãïŒ ãã¹ãŠã®ããŒã¿åŠçãã¯ã©ã€ã¢ã³ããµã€ãã§å®è¡ãããããã¯å¿çæéã®é å»¶ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
æé©åãããã¢ãããŒãïŒ Node.jsã®ãããªèšèªã䜿çšããŠãµãŒããŒãµã€ãã§ããŒã¿åŠçãå®è¡ãããéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠããŒã¿ã䞊ååŠçãããåèšç®ãé¿ããããã«ããŒã¿åŠçã®çµæããã£ãã·ã¥ãããå¯èŠåã«å¿ èŠãªããŒã¿ã®ã¿ãã¯ã©ã€ã¢ã³ããµã€ãã«éä¿¡ããã
çµè«
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã¯ãããŒã¿ã³ã¬ã¯ã·ã§ã³ãåŠçããããã®åŒ·åã§è¡šçŸåè±ããªæ¹æ³ãæäŸããŸãããã®èšäºã§èª¬æããããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ãšæé©åæè¡ãçè§£ããããšã§ãã¹ããªãŒã æäœãå¹ççã§ããã©ãŒãã³ã¹ãé«ãããšãä¿èšŒã§ããŸããæœåšçãªããã«ããã¯ãç¹å®ããç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«é©ããããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãéžæããããã«ãã³ãŒãã®ãããã¡ã€ãªã³ã°ãšãã³ãããŒã¯ãå¿ããã«è¡ã£ãŠãã ããã
èŠçŽãããšãJavaScriptã§ã®ã¹ããªãŒã æäœã®åŠçé床ãæé©åããã«ã¯ã次ã®ããšãå«ãŸããŸãïŒ
- é å»¶è©äŸ¡ã®å©ç¹ãšéçãçè§£ããããšã
- äžéããŒã¿æ§é ãæå°åããããšã
- äžèŠãªã€ãã¬ãŒã·ã§ã³ãé¿ããããšã
- å¹ççãªããŒã¿æ§é ã䜿çšããããšã
- ãã©ã³ã¹ãã¥ãŒãµã®äœ¿çšãæ€èšããããšã
- éåææäœã掻çšããããšã
- ã³ãŒã«ããã¯é¢æ°ãæé©åããããšã
- ã³ãŒãã®ãããã¡ã€ãªã³ã°ãšãã³ãããŒã¯ãè¡ãããšã
ãããã®ååãé©çšããããšã§ããšã¬ã¬ã³ãã§ããã©ãŒãã³ã¹ã®é«ãJavaScriptã¢ããªã±ãŒã·ã§ã³ãäœæããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã